$(document).ready(function() {
	$('#menuPanel').panel({
		title : '菜单树',
		width : pageWidth * 0.45,
		height : pageHeight * 0.95
	});

	loadMenuTree();

	$('#menuDetailPanel').panel({
		title : '菜单明细',
		width : pageWidth * 0.45,
		height : 255
	});

	$('#menuPropertygrid').propertygrid({
		border : false,
		data : [ {
			'name' : '菜单编号',
			'field' : 'menuId',
			'value' : ''
		}, {
			'name' : '菜单名称',
			'field' : 'menuName',
			'value' : ''
		}, {
			'name' : '菜单类型',
			'field' : 'menuType',
			'value' : ''
		}, {
			'name' : 'URL',
			'field' : 'url',
			'value' : ''
		}, {
			'name' : '父菜单',
			'field' : 'parentMenuId',
			'value' : ''
		}, {
			'name' : '图标',
			'field' : 'icon',
			'value' : ''
		}, {
			'name' : '排序',
			'field' : 'sort',
			'value' : ''
		}, {
			'name' : '备注',
			'field' : 'remark',
			'value' : ''
		} ]
	});

	$('#menuRolePanel').panel({
		title : '关联角色',
		width : pageWidth * 0.45,
		height : pageHeight * 0.95 - 255
	});
	$('#roleDatagrid').datagrid({
		fit : true,
		fitColumns : true,
		singleSelect : true,
		striped : true,
		pagination : true,
		columns : [ [ {
			field : 'roleId',
			title : '角色编号'
		}, {
			field : 'roleName',
			title : '角色名称'
		}, {
			field : 'roleAlias',
			title : '角色别称'
		}, {
			field : 'creator',
			title : '创建者',
			formatter : function(value, row, index) {
				return value.userName;
			}
		}, {
			field : 'crtTime',
			title : '创建时间',
			formatter : function(value, row, index) {
				var dateValue = new Date(value);
				return dateValue.format('yyyy-MM-dd HH:mm:ss');
			}
		} ] ]
	});

	$('#menuDiv').dialog({
		width : 400,
		height : 'auto',
		modal : true,
		closable : false,
		closed : true,
		buttons : [ {
			iconCls : 'icon-save',
			text : '保存',
			handler : saveMenu
		}, {
			iconCls : 'icon-cancel',
			text : '关闭',
			handler : closeMenuDiv
		} ]
	});

	// 只有菜单类型为URL时才需要输入访问地址
	$('#menuType').combobox({
		required : true,
		panelHeight : 'auto',
		valueField : 'value',
		textField : 'name',
		url : ctx + '/common/menu/type',
		onChange : function(newValue, oldValue) {
			$('#url').validatebox('disableValidation');
			$('#urlDiv').hide();
			if (newValue == 'URL') {
				$('#urlDiv').show();
				$('#url').validatebox('enableValidation');
			}
		}
	});

});

/**
 * 加载菜单tree
 */
function loadMenuTree() {
	$.get(ctx + '/sys/menu/query?' + Math.random(), {
		parentMenuId : baseMenuId,
		searchSubmenu : true
	}, function(data) {
		$('#menuTreegrid').treegrid({
			fit : true,
			animate : true,
			idField : 'id',
			treeField : 'text',
			fitColumns : true,
			columns : [ [ {
				title : '菜单名',
				field : 'text',
				width : 20
			}, {
				title : '创建者',
				field : 'crtName',
				width : 10
			}, {
				title : '创建时间',
				field : 'crtTime',
				width : 11
			} ] ],
			data : EasyUI.GenerateTreeData({
				data : $.parseJSON(data)
			}),
			onClickRow : function(rowData) {
				// 重新加载菜单明细
				refreshMenuPropertygrid(getMenu(rowData.attributes.menuId));
				// 重新加载菜单关联角色
				var options = $('#roleDatagrid').datagrid('options');
				options.url = ctx + '/sys/role/query/menu';
				options.queryParams = {
					menuId : rowData.attributes.menuId
				};
				$('#roleDatagrid').datagrid('load');
			},
			toolbar : [ {
				text : '新增',
				iconCls : 'icon-add',
				handler : function() {
					var menuNode = $('#menuTreegrid').treegrid('getSelected');

					var param = {};
					if (menuNode != null) {
						param.parentMenuId = menuNode.attributes.menuId;
					}
					openMenuDiv(param);
				}
			}, '-', {
				text : '修改',
				iconCls : 'icon-edit',
				handler : function() {
					var menuNode = $('#menuTreegrid').treegrid('getSelected');

					if (menuNode == null) {
						EasyUI.ShowMessage({
							msg : '请选择菜单！'
						});
					} else {
						menuNode = getMenu(menuNode.attributes.menuId);
						openMenuDiv(menuNode);
					}
				}
			}, '-', {
				text : '删除',
				iconCls : 'icon-remove',
				handler : function() {
					var menuNode = $('#menuTreegrid').treegrid('getSelected');

					if (menuNode == null) {
						EasyUI.ShowMessage({
							msg : '请选择菜单！'
						});
					} else {
						removeMenu(menuNode.attributes.menuId);
					}
				}
			}, '-', {
				text : '刷新',
				iconCls : 'icon-reload',
				handler : loadMenuTree
			} ]
		});
		$('#menuTreegrid').treegrid('expandAll');
	});
}

/**
 * 加载新增/修改菜单DIV里的父菜单下拉框选项
 * 
 * @returns
 */
function loadParentMenu() {
	$('#parentMenuId').combobox({
		panelHeight : 'auto',
		valueField : 'menuId',
		textField : 'menuName',
		url : ctx + '/sys/menu/query'
	});
}

/**
 * 根据菜单ID查询菜单信息（同步）
 * 
 * @param menuId
 * @returns
 */
function getMenu(menuId) {
	var menu = {};
	$.ajax({
		url : ctx + '/sys/menu/query?' + Math.random(),
		async : false,
		data : {
			menuId : menuId
		},
		success : function(data) {
			menu = $.parseJSON(data)[0];
		}
	});
	return menu;
}

/**
 * <li>格式化menuDiv用以新增、修改</li>
 */
function initMenuDiv(menu) {
	$('input[name=menuId]').val(menu.menuId ? menu.menuId : '');
	$('input[name=menuName]').val(menu.menuName ? menu.menuName : '');

	if (menu.menuType) {
		$('#menuType').combobox('setValue', menu.menuType);
		if (menu.menuType == 'URL') {
			$('input[name=url]').val(menu.url ? menu.url : '');
		}
	}

	loadParentMenu();
	$('#parentMenuId').combobox('setValue', menu.parentMenuId ? menu.parentMenuId : baseMenuId);
	// $('#sortInput').numberspinner('setValue', 10);

	$('input[name=remark]').val(menu.remark ? menu.remark : '');
}

/**
 * 关闭新增菜单DIV
 */
function closeMenuDiv() {
	$('#menuForm').form('disableValidation');
	$('#menuForm').form('reset');
	$('#menuForm').form('enableValidation');
	$('#menuDiv').dialog('close');
}

/**
 * 打开新增菜单DIV
 */
function openMenuDiv(menu) {
	if (menu.menuId) {
		// 传入菜单ID为修改
		$('#menuDiv').dialog('setTitle', '修改菜单');
	} else {
		// 新增菜单
		$('#menuDiv').dialog('setTitle', '新增菜单');
	}
	initMenuDiv(menu);
	$('#menuDiv').dialog('open');

	$('input[name=menuName]').focus();
}

/**
 * 保存菜单
 */
function saveMenu() {
	$('#menuForm').form('submit', {
		url : ctx + '/sys/menu/save',
		onSubmit : function() {
			return $(this).form('validate');
		},
		success : function(data) {
			var obj = $.parseJSON(data);

			EasyUI.ShowMessage({
				msg : obj.msg
			});

			if (obj.success) {
				loadMenuTree();
				closeMenuDiv();
			}
		}
	});
}

/**
 * 删除菜单
 */
function removeMenu(menuId) {
	$.post(ctx + '/sys/menu/remove', {
		menuId : menuId
	}, function(data) {
		var obj = $.parseJSON(data);
		EasyUI.ShowMessage({
			msg : obj.msg
		});
		if (obj.success) {
			loadMenuTree();
		}
	});
}

/**
 * 刷新菜单列表
 */
function refreshMenuDatagrid() {
	$('#menuDatagrid').datagrid('reload');
}

/**
 * 根据菜单数据刷新menu属性表格
 * 
 * @param dataObj
 *            {menuId:'', menuName:'', menuType:'', url:'', parentMenuId:'',
 *            icon:'', sort:'', creator:'', crtTime:''}
 */
function refreshMenuPropertygrid(fieldObj) {
	$.each($('#menuPropertygrid').propertygrid('getData').rows, function(i, o) {
		var val = fieldObj[o.field];
		if (o.field == 'creator') {
			val = val.userName;
		} else if (o.field == 'crtTime') {
			val = new Date(val).format('yyyy-MM-dd HH:mm:ss');
		}
		$('#menuPropertygrid').propertygrid('updateRow', {
			index : i,
			row : {
				value : val
			}
		})
	});
}